home *** CD-ROM | disk | FTP | other *** search
/ MacHack 2001 / MacHack 2001.toast / pc / The Hacks / Palm Finder 2 / Src / Commanders / commander.cpp < prev    next >
Encoding:
Text File  |  2001-06-23  |  1.7 KB  |  122 lines

  1. // commander.cpp
  2.  
  3. #include "commander.h"
  4.  
  5.  
  6. // initialize static vars
  7. commander* commander::s_top_commander = NULL;
  8. commander* commander::s_default_super = NULL;
  9.  
  10.  
  11. #pragma mark  Public:
  12.  
  13. //
  14. // constructor
  15. //
  16. commander::commander(commander* in_super)
  17. {
  18.     m_super = in_super;
  19.     m_sub = NULL;
  20.     m_next = NULL;
  21.     add();
  22. }
  23.  
  24. //
  25. // default constructor
  26. //
  27. commander::commander()
  28. {
  29.     m_super = s_default_super;
  30.     m_sub = NULL;
  31.     m_next = NULL;
  32.     add();
  33. }
  34.  
  35. //
  36. // destructor
  37. //
  38. commander::~commander() {
  39.     if (m_next!=NULL)
  40.         delete m_next;
  41.     remove();
  42. }
  43.  
  44. //
  45. // do_cmd
  46. //
  47. Boolean            
  48. commander::do_cmd (int in_eventID, void* io_data) {
  49.     Boolean handled = do_cmd_self (in_eventID, io_data);
  50.     
  51.     if ((not handled) && (m_sub!=NULL))
  52.         handled = m_sub->do_cmd (in_eventID, io_data);
  53.  
  54.     commander*    item = m_next;
  55.     while ((not handled) && (item!=NULL)) {
  56.         handled = item->do_cmd (in_eventID, io_data);
  57.         item = item->m_next;
  58.     }
  59.  
  60.     return handled;
  61. }
  62.  
  63. //
  64. // dispatch_command
  65. //
  66. Boolean            
  67. commander::dispatch_command (int in_eventID, void* io_data) {
  68.     Boolean handled = false;
  69.     
  70.     if (s_top_commander!=NULL)
  71.         handled = s_top_commander->do_cmd (in_eventID, io_data);
  72.     return handled;
  73. }
  74.  
  75.  
  76. #pragma mark -
  77. #pragma mark  Private:
  78.  
  79. //
  80. // add()
  81. //
  82. void 
  83. commander::add() {
  84.     this->m_next = NULL;
  85.     if (m_super==NULL) return;
  86.     
  87.     commander* p = m_super->get_sub();
  88.     
  89.     if (p==NULL) {
  90.         m_super->set_sub(this);
  91.     } else {
  92.         while (p->m_next != NULL) {
  93.             p = p->m_next;
  94.         }
  95.         p->m_next = this;
  96.     }
  97. }
  98.  
  99. //
  100. // remove()
  101. //
  102. void    
  103. commander::remove() {
  104.     if (m_super==NULL) return;
  105.  
  106.     commander* p = m_super->get_sub();
  107.     commander* next = this->m_next;
  108.     
  109.     this->m_next = NULL;
  110.     if (p==this) {
  111.         m_super->set_sub(next);
  112.     } else {
  113.         while (p!=NULL) {
  114.             if (p->m_next == this) {
  115.                 p->m_next = next;
  116.                 break;
  117.             }
  118.             p = p->m_next;
  119.         }
  120.     }
  121. }
  122.